package com.tedu.API.thread;

/**
 * 线程---创建  3种
 *     第一种:  子类  继承Thread 方案--【使用率不多】
 *         第一步: 编写一个子类My Thread1  继承 Thread
 *         第二步: 子类中重写run方法 【线程的运行】
 *         第三步: 实例化 MyThread1 对象   调用 start方法 【启动线程】
 *
 *     第二种:  子类  实现Runnable接口  方案--【推荐用法】
 *        第一步: 编写子类 MyRunnable1  实现 Runnable  接口
 *        第二步: 子类，强制重写run方法  【线程运行】
 *        第三步: 实例化MyRunnable1 【没有start方法】
 *        第四步: 创建Thread对象，把实例化MyRunnable1 对象通过构造器
 *        第五步: 调用Thread对象  start方法
 *
 *     线程  继承Thread 内嵌入Runnable接口  重写run方法
 *          JavaOOP----缺点: Java只支持单继承, 子类继承Thread,
 *          无法拓展: 不仅线程、其他集合、继承其他类, 只具备线程功能
 *          启动线程方法: start() ---线程生命周期
 *          缺点: 线程创建不明确
 *          实现Runnable  真正线程的运行---定义run方法，规定线程运行状态
 *          优点: 继承还可以实现---拓展性高
 *          缺点: 线程创建不方便---项目:步骤逻辑清晰，可阅读性较高
 *     第三种:  匿名内部类实现线程--->Lambda表达式
 *
 *   JavaOOP: 封装---内部类: 成员内部类、方法内部类、静态内部类、匿名内部类
 *   匿名内部类的创建方式:
 *       对象   引用=new 对象(){}
 *   匿名内部类--创建一次===子实现类实例化一次Thread/Runnable
 *             优点: 省去创建子类对象名称---接口创建、抽象类创建!
 */
public class TR {
    public static void main(String[] args) {
        //1.类只需要实例化一次: 匿名内部类---Thread
        Thread t1=new Thread(){
            @Override
            public void run() {
               for (int i=0;i<1000;i++){
                   System.out.println("即使身处阴沟，依旧要仰望星空");
               }
            }
        };
        t1.start();
        //2.类只需要实例化一次: 匿名内部类---Runnable
        Thread t2=new Thread(new Runnable() {
            @Override
            public void run() {
                for (int i=0;i<1000;i++){
                    System.out.println("海有潮汐，真相会随着落潮浮出水面");
                }
            }
        });
        t2.start();
    }
}
